const { ethers } = require("hardhat");

/**
 * 解释不同网络环境的区别
 */
async function main() {
    console.log("🌐 以太坊网络环境详解\n");
    
    // 获取当前网络信息
    const network = await ethers.provider.getNetwork();
    const chainId = network.chainId;
    
    console.log("📍 当前连接的网络:");
    console.log(`  网络名称: ${network.name}`);
    console.log(`  Chain ID: ${chainId}`);
    console.log(`  是否为本地: ${chainId === 31337n ? '是' : '否'}\n`);
    
    console.log("🔍 网络类型对比:\n");
    
    // 本地网络
    console.log("1️⃣ 本地网络 (Hardhat Network)");
    console.log("   Chain ID: 31337");
    console.log("   位置: 你的电脑内存中");
    console.log("   特点:");
    console.log("   ✅ 完全模拟以太坊环境");
    console.log("   ✅ 预设20个测试账户，每个10,000 ETH");
    console.log("   ✅ 交易即时确认，无需等待");
    console.log("   ✅ 可以重置状态，重新开始");
    console.log("   ✅ 免费，无需真实ETH");
    console.log("   ❌ 只有你能访问");
    console.log("   ❌ 关闭电脑就消失\n");
    
    // 测试网络
    console.log("2️⃣ 测试网络 (如Sepolia)");
    console.log("   Chain ID: 11155111");
    console.log("   位置: 全球分布的真实节点");
    console.log("   特点:");
    console.log("   ✅ 真实的区块链网络");
    console.log("   ✅ 全世界都能访问");
    console.log("   ✅ 永久保存数据");
    console.log("   ✅ 模拟主网环境");
    console.log("   ❌ 需要真实的测试ETH");
    console.log("   ❌ 交易需要等待确认\n");
    
    // 主网
    console.log("3️⃣ 主网 (Ethereum Mainnet)");
    console.log("   Chain ID: 1");
    console.log("   位置: 全球以太坊网络");
    console.log("   特点:");
    console.log("   ✅ 真实的以太坊网络");
    console.log("   ✅ 真实价值的ETH和代币");
    console.log("   ❌ 交易费用昂贵");
    console.log("   ❌ 错误代价高昂\n");
    
    console.log("🔧 为什么本地测试有效？\n");
    console.log("Hardhat本地网络是一个完整的以太坊模拟器：");
    console.log("• 实现了完整的以太坊虚拟机(EVM)");
    console.log("• 支持所有以太坊操作码和功能");
    console.log("• 模拟真实的区块链状态");
    console.log("• 执行相同的智能合约字节码");
    console.log("• 遵循相同的共识规则");
    console.log("\n所以在本地测试的合约，在真实网络上也能正常工作！");
}

main()
    .then(() => process.exit(0))
    .catch((error) => {
        console.error(error);
        process.exit(1);
    });